#MirarV5
#LOGDIR , el path
#LOGEXT , la extension de los archivos log
#LOGSIZE , el tamanio de los archivos log
#Cada comando tiene su archivo de log
# "$LOGDIR/<comando>$LOGEXT"
#W5 = ( when, who, where, what ( I, A ,E ,SE ), why ( up to 120 char )
#Separador - , guion

#Por comodidad, declaro aca codigos de eror como constantes
declare -i ERROR_ARCHIVO_NO_EXISTE=2
declare -i ERROR_FALTAN_PARAMETROS=3

#para ir probando lo que voy programando
#LOGDIR="./carpeta1"
#LOGEXT=".log"
#------------------------------------------
#Variables que voy a utilizar para realizar acciones una vez que
#haya terminado de parsear todo con el getopts
Nlineas=0
StringFiltro=""

#http://wiki.bash-hackers.org/howto/getopts_tutorial
while getopts "hn:s:" opt;do
	case $opt in
		h)
			echo "Uso: MirarV5 [opciones] [pars]";
			echo "MirarV5: Muestra los registros del log del comando especificado.";
			echo "Opciones y Parametros: Los argumentos son obligatorios";
			echo "Parametros:";	
			echo "	[comando]
		Nombre del comando del cual se desea mirar el Log.";
			echo "Opciones:";
			echo "	-n [cantidad]
		Muestra los ultimos N registros de la busqueda realizada.";
			echo "	-s [string]
		Muestra por los registros que contengan al string.";
			echo "	-h
		Muestra la ayuda.";
			exit 0;
			;;
		n)
			#echo "mostrar las ultimas $OPTARG lineas"
			Nlineas=$OPTARG
			;;
		s)
			#echo "filtrar por string $OPTARG"
			StringFiltro=$OPTARG
			;;
		\?)
			echo "Invalid option: -$OPTARG"
			exit 1
			;;
		:)
			echo "Option -$OPTARG requires an argument."
			exit 1
			;;
	esac;
done

#echo $(($OPTIND-1))
shift $(($OPTIND-1))	#Descarto las opciones que lei con el getopts
#echo $1

if [ "$1" = "" ] 
	then
	echo "No se ingreso ningun Comando"
	exit $ERROR_FALTAN_PARAMETROS
fi

ComandoReq=$1
RutaAbsolutaArchLog="$LOGDIR/$ComandoReq$LOGEXT"

if ! [ -f "$RutaAbsolutaArchLog" ]
	then
	echo "No existe el archivo que se desea consultar."
	exit $ERROR_ARCHIVO_NO_EXISTE
fi

#echo "$RutaAbsolutaArchLog"
#Aca empezamos a filtrar como unos champions

if  [ $Nlineas -eq 0 ] && [ "$StringFiltro" = "" ]  
	then
		echo "El caso normal, sin filtro ni Restriccion de lineas"
		echo " "
		cat "$RutaAbsolutaArchLog" |awk -F '-' 'BEGIN { print "Fecha                User     Comando         Tipo      Comentario"
							      print "----                 ------    -------        ---        --------- " }
							    { printf "%-20s %-10s %-10s %4s %s\n",$1,$2 ,$3,$4,$5}'
fi

if [ $Nlineas -ne 0	] && [ "$StringFiltro" != "" ]
	then
		echo "Busqueda con filtro de string - $StringFiltro -, y mostrando ultimas $Nlineas lineas"
		echo " "
		#http://en.wikipedia.org/wiki/Tail_%28Unix%29
		grep "$StringFiltro" "$RutaAbsolutaArchLog" | tail -n $Nlineas |awk -F '-' 'BEGIN { print "Fecha                User     Comando         Tipo      Comentario"
											  print "----                 ------    -------        ---        --------- " }
											{ printf "%-20s %-10s %-10s %4s %s\n",$1,$2 ,$3,$4,$5}'
fi

if [ $Nlineas -eq 0 ] && [ "$StringFiltro" != "" ]
	then
		echo "Busqueda con filtro de string - $StringFiltro - , mostrando todas las lineas"
		echo " "
		grep "$StringFiltro" "$RutaAbsolutaArchLog" |awk -F '-' 'BEGIN { print "Fecha                User     Comando         Tipo      Comentario"
									  print "----                 ------    -------        ---        --------- " }
									  { printf "%-20s %-10s %-10s %4s %s\n",$1,$2 ,$3,$4,$5}'
fi

if [ $Nlineas -ne 0 ] && [ "$StringFiltro" == "" ]
	then
		echo "Busqueda sin filtro de string,mostrando las ultimas $Nlineas lineas"
		echo " "
		cat "$RutaAbsolutaArchLog" | tail -n $Nlineas |awk -F '-' 'BEGIN { print "Fecha                User     Comando         Tipo      Comentario"
										print "----                 ------    -------        ---        --------- " }
										{ printf "%-20s %-10s %-10s %4s %s\n",$1,$2 ,$3,$4,$5}'
fi		

exit 0
